#include <stdio.h>
#define MaxSize 100
typedef int DataType;

typedef struct
{
    DataType list[MaxSize];
    int size;
}SeqList;

void ListInitiate(SeqList *L) /*初始化顺序表*/
{
    L->size = 0; /*定义初始数据元素个数*/
}

int ListLength(SeqList L) /*返回顺序表L的当前数据元素个数*/
{
    return L.size;
}
int ListInsert(SeqList *L, int i, DataType x)
/*在顺序表L的位置i（0 <= i <= size）前插入数据元素值x*/
/*插入成功返回1，插入失败返回0*/
{
    int j;
    if(L->size >= MaxSize)
    {
        printf("顺序表已满无法插入！\n");
        return 0;
    }
    else if (i <0 || i > L->size)
    {
        printf("参数i不合法！\n");
        return 0;
    }
    else{
        //此段程序有错误
        for(j=L->size; j>i; j--)
        L->list[j] = L->list[i]; /*为插入做准备*/  //已修改
        L->list[i] = x; /*插入*/
        L->size ++; /*元素个数加1*/
        return 1;
    }

}

int ListDelete(SeqList *L, int i, DataType *x)
/*删除顺序表L位置i（0 <= i <= size-1) 的数据元素值并存放到参数X中*/
/*删除成功返回1， 删除失败返回0*/
{
    int j;
    if(L->size <= 0)
    {
        printf("顺序表已空无数据可删除！\n");
        return 0;
    }else if (i<0 || i>L->size-1){
        printf("参数不合法1\n");
        return 0;
    }

    else{
        //此段程序有错
        *x = L->list[i]; /*保存删除的元素到参数x中*/
        for( j= i+1; j <= L->size-1;j++)
            L->list[j-1] = L->list[j]; /*依次前移*/

        //L->size--; /*数据元素个数减一；*/
        return 1;
    }
}
int  ListGet(SeqList L, int i, DataType *x)
/*取顺序表L中第i个数据元素的值存于x中，成功则返回1，失败返回0*/
{
    if(i < 0 || i > L.size-1){
        printf("参数i不合法！\n");
        return 0;
    } else{
        *x = L.list[i];
        return 1;
    }
}

//有错误：实现函数体，实现在L内查找X。
//当x存在L中时，返回X所在的索引的最小值；
//当X不存在于L中时，返回-1.
int ListSearch(SeqList L, DataType x){
}
int main(int argc, char * argv[ ])
{
    SeqList  mylist;
    int i, x;
    ListInitiate(&mylist);
    for(i = 0; i < 10; i++)
    ListInsert(&mylist, i, i+1);
    ListDelete(&mylist,4, &x);
    for (i = 0; i < ListLength(mylist); i++)
    {
        //此段程序有一处错误；
        ListGet(mylist, i, &x);
        printf("%d\n",x);
    }
    return 0;
}

